package com.powernode.lambda.base;


import java.util.function.Function;

/**
 * 方法引用底层
 * JDK会替我们生成方法引用的实现类和方法，只是我们看不见
 */
public class base02 {
    Function<Student, String> func = Student::getName; // stu->stu.getName()

    /**
     *             lambda 表达式是一种语法糖，它仍然会被翻译成 类、对象、方法
     *             1. 方法从哪来 : 编译器发现代码中出现了 lambda，就会在当前类中生成 private static 方法，方法内包含的就是 lambda 的逻辑
     *                 实验代码
     *             2. 类和对象从哪来 : 运行期间动态生成
     */

    static final class MyMethodReference implements Function<Student, String> {

        @Override
        public String apply(Student student) {
            return student.getName();
        }
    }


    static class Student {
        private String name;

        public String getName() {
            return name;
        }
    }

}
